package ma.myschool.app.webapp.action;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import ma.myschool.app.model.AnneeScolaire;
import ma.myschool.app.model.Classe;
import ma.myschool.app.model.Groupe;
import ma.myschool.app.service.AnneeScolaireManager;
import ma.myschool.app.service.ClasseManager;
import ma.myschool.app.service.GroupeManager;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component("adminController")
@Scope("session")
public class AdminController extends BasePage implements Serializable {
    
	/**
	 * 
	 */
	private static final long serialVersionUID = -7855065199864559808L;
	
	private GroupeManager groupeManager;
	private AnneeScolaireManager anneeScolaireManager;
	private ClasseManager classeManager;
	
	private List<Groupe> groupes = new ArrayList<>();
	
    private Groupe groupe = new Groupe();
    private AnneeScolaire anneeScolaire = new AnneeScolaire();
    
    private Long id;
    boolean createNewAnneeScolaire = true;

    public Groupe getGroupe() {
        return groupe;
    }

    public void setGroupe(Groupe groupe) {
        this.groupe = groupe;
    }

    public void setId(Long id) {
        this.id = id;
    }
    
    public boolean isCreateNewAnneeScolaire() {
		return createNewAnneeScolaire;
	}

	public void setCreateNewAnneeScolaire(boolean createNewAnneeScolaire) {
		this.createNewAnneeScolaire = createNewAnneeScolaire;
	}

	public String saveNewAnneeScolaire(){
    	
    	if(anneeScolaire.getId() == null) anneeScolaireManager.save(anneeScolaire);
    	 
    	for (Groupe groupe : groupes) {
    		groupeManager.save(groupe);
		}
  
    	addMessage("start.anneeScolaire.ok");

         return "success";
     }

    public void generateNewGroupes(){
    	List<Classe> classes = classeManager.getAll();
    	if(classes != null){
    		groupes = new ArrayList<>();
    		for (int i = 0; i < classes.size(); i++) {
				groupe = new Groupe();
				groupe.setAnneeScolaire(anneeScolaire);
				groupe.setClasse(classes.get(i));
				groupe.setLibelleGroupe(groupe.getClasse().getNomClasse() + " " + anneeScolaire.getAnneeScolaire() + " A" );
				groupe.setLibelleGroupeAr(groupe.getClasse().getNomClasseAr() + " أ" );
				groupes.add(groupe);
			}
    	}
    	
    }
    
    public List<Groupe> getGroupes() {
    	return groupes;
	}

	public void setGroupes(List<Groupe> groupes) {
		this.groupes = groupes;
	}

	public AnneeScolaire getAnneeScolaire() {
		return anneeScolaire;
	}

	public void setAnneeScolaire(AnneeScolaire anneeScolaire) {
		this.anneeScolaire = anneeScolaire;
	}

	@Autowired
    public void setAnneeScolaireManager(@Qualifier("anneeScolaireManager") AnneeScolaireManager anneeScolaireManager) {
        this.anneeScolaireManager = anneeScolaireManager;
    }
    
    @Autowired
    public void setClasseManager(@Qualifier("classeManager") ClasseManager classeManager) {
        this.classeManager = classeManager;
    }
    
    @Autowired
    public void setGroupeManager(@Qualifier("groupeManager") GroupeManager groupeManager) {
        this.groupeManager = groupeManager;
    }
    
    public List<Classe> getClasses(){
    	List<Classe> classes = classeManager.getAll();
    	if(classes != null) 
    		return sort(classes, "nomClasse", true, false);
		else
			return new ArrayList<>();
    }
    
    public List<AnneeScolaire> getAnneeScolaires(){
    	List<AnneeScolaire> anneeScolaires = anneeScolaireManager.getAll();
    	if(anneeScolaires != null) 
    		return sort(anneeScolaires, "anneeScolaire", true, false);
		else
			return new ArrayList<>();
    }
    
} 